'use strict';
/*
  模型一定要写在app.model下
  表明一定要跟模型名称一致
*/

module.exports = app => {
  // 引入数据类型
  const { INTEGER, DATE, STRING, ENUM } = app.Sequelize;
  // 配置
  const Friend = app.model.define('friend',{
    id: {type: INTEGER(20).UNSIGNED, primaryKey: true, autoIncrement: true},
      user_id: {type: INTEGER(20).UNSIGNED, allowNull: false, comment: '用户id',
        // 定义外键
        references: {
          model: 'user',  // 对应表名称
          key: 'id' // 对应表的主键
        },
        onUpdate: 'restrict', // 更新时操作
        onDelete: 'cascade' // 删除时操作
      },
      friend_id: {type: INTEGER(20).UNSIGNED, allowNull: false, comment: '好友id',
        // 定义外键
        references: {
          model: 'user',  // 对应表名称
          key: 'id' // 对应表的主键
        },
        onUpdate: 'restrict', // 更新时操作
        onDelete: 'cascade' // 删除时操作
      },
      nickname: { type: STRING(30), allowNull: false, defaultValue: '', comment: '备注' },
      lookme: { type: INTEGER(1), allowNull: false, defaultValue: 1, comment: '看我'},
      lookhim: { type: INTEGER(1), allowNull: false, defaultValue: 1, comment: '看他' },
      star: { type: INTEGER(1), allowNull: false, defaultValue: 0, comment: '是否为星标好友：0否1是' },
      isblack: {type: INTEGER(1), allowNull: false, defaultValue: 0, comment: '是否加入黑名单：0否1是'},
      created_at: DATE,
      updated_at: DATE
  });

  // 定义模型关联关系
  Friend.associate = function(model){
    // 反向一对多关系
    Friend.belongsTo(app.model.User, {
      // 起别名
      as: "friendInfo",
      // 指定外键（第一个外键可以不写）
      foreignKey:'friend_id'
    });

    Friend.belongsTo(app.model.User, {
      // 起别名
      as: "userInfo",
      // 指定外键（第一个外键可以不写）
      foreignKey:'user_id'
    });

    // 多对多（标签）
    Friend.belongsToMany(app.model.Tag, {
      through: 'friend_tag',
      foreignKey: 'friend_id'
    })
  }
  return Friend
};